#include <cstdio>
#include <cstdlib>
#include <unordered_map>
using namespace std;

#define MSK(n) ((1 << (n + 1)) - 2)

unordered_map<int, int> ind;
int total = 3;
int arr[20] = {0};


void printOneResult(int n) {
	for(int i = 1; i <= n; i++) {
		if(i > 1) printf(" ");
		printf("%d", arr[i]);
	}
	printf("\n");
	total -= 1;
	return ;
}

int dfs(int i, int t1, int t2, int t3, int n) {
	if(i > n) {
		if(total) printOneResult(n);
		return 1;
	}
	int ans = 0;
	for(int t = t1; t; t -= (-t & t)) {
		int j = ind[-t & t];
		if((t2 & (1 << (i  + j - 1))) && (t3 & (1 << (i - j + n)))) {
			arr[i] = j;
			ans += dfs(i + 1,t1 ^ (1 << j),
			t2 ^ (1 << (i + j - 1)),
			t3 ^ (1 << (i - j + n)), 
			n
			);
		}
	}
	return ans;
}

int main() {
	int n, MSK;
	scanf("%d", &n);
	total = 3;
	// 用map映射位权表
	for(int i = 0; i < 2 * n; i++) {
		ind[1 << i] = i;  // 打错
	}
	// 行、列、正斜边、反斜边
	int ans_3 = dfs(1, MSK(n), MSK(2 * n - 1), MSK(2 * n - 1), n);
	printf("%d\n", ans_3);
	return 0;
}